1. 使用HttpClient與第三方API通信
ASP.NET Core內建的HttpClient是一個強大的工具,用來發送HTTP請求並處理來自第三方API的回應。首先,我們需要在應用中注入HttpClient,可以在Startup.cs中進行如下配置:
public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpClient();
    services.AddControllers();
}
接著,我們可以在控制器中使用HttpClient來發送請求。例如,假設我們要調用一個地圖API來獲取地理數據:
public class MapController : ControllerBase
{
    private readonly HttpClient _httpClient;
    public MapController(HttpClient httpClient)
    {
        _httpClient = httpClient;
    }
    [HttpGet("location")]
    public async Task<IActionResult> GetLocationData(string address)
    {
        var apiUrl = $"https://api.example.com/location?address={address}";
        var response = await _httpClient.GetAsync(apiUrl);
        if (response.IsSuccessStatusCode)
        {
            var data = await response.Content.ReadAsStringAsync();
            return Ok(data);
        }
        return StatusCode((int)response.StatusCode, "Failed to fetch location data");
    }
}
在這個例子中,HttpClient被用來發送一個GET請求至外部的地圖API,並將結果返回給用戶。
2. 處理API憑證與身份驗證
大多數第三方API都需要身份驗證,通常是通過API Key或OAuth等機制。我們可以通過添加標頭來發送API Key,例如:
[HttpGet("weather")]
public async Task<IActionResult> GetWeatherData(string city)
{
    var apiKey = "your_api_key_here";
    var apiUrl = $"https://api.weather.com/v3/weather?city={city}&key={apiKey}";
    var request = new HttpRequestMessage(HttpMethod.Get, apiUrl);
    request.Headers.Add("Authorization", $"Bearer {apiKey}");
    var response = await _httpClient.SendAsync(request);
    if (response.IsSuccessStatusCode)
    {
        var data = await response.Content.ReadAsStringAsync();
        return Ok(data);
    }
    return StatusCode((int)response.StatusCode, "Failed to fetch weather data");
}
這樣可以確保API請求攜帶必要的憑證信息,從而進行授權訪問。
3. 處理API回應與錯誤
與第三方API交互時,處理可能的錯誤情況至關重要。我們可以檢查API的回應狀態碼,並根據不同的錯誤碼返回合適的錯誤訊息:
if (response.IsSuccessStatusCode)
{
    var data = await response.Content.ReadAsStringAsync();
    return Ok(data);
}
else if (response.StatusCode == HttpStatusCode.Unauthorized)
{
    return Unauthorized("API key is invalid or expired.");
}
else if (response.StatusCode == HttpStatusCode.BadRequest)
{
    return BadRequest("Invalid request to the API.");
}
else
{
    return StatusCode((int)response.StatusCode, "An error occurred while calling the API.");
}
這樣的錯誤處理方式可以提高應用的穩定性和用戶體驗。
4. 小結
整合第三方服務與API是現代應用開發中的常見需求。透過ASP.NET Core中的HttpClient,我們可以輕鬆地與外部API進行通信,並處理身份驗證與錯誤回應。靈活運用這些技術,可以讓應用更具擴展性和功能性。